Building Datapath
Storage element: Register File
在設計MIPS Register File 的時候 我們可以回想一下因為MIPS總共有32個General purpose registers
也因此
我們要把剛才前面所設計好一個32bits register把它copy 32份
所以我們會有32個32個bits的register
有了這樣子的register file之後
我們需要去存取它
所以我們需要用5個bits去決定到底我們要存取是哪一個register
RW、RA 跟 RB
我們知道 在最多的情況下
我們在R Format的指令會有 rs、rt 跟rd
也因此我們會有3個5個bits的input
這邊同學可以看到有RW、RA 跟 RB
RA跟RB
其中的RA跟RB代表的就是
我可以同時讓這個register file去讀出兩筆暫存器的值
那兩筆暫存器的值
分別會被讀出來之後放到busA跟busB
至於我們要讀哪一個暫存器呢
則由RA跟RB分別的去描述它
也因此RA跟RB會是5個bits
RW
另一方面 因為我們要把值給寫入到暫存器裡面
所以我們會需要用到RW
在這裡的RW 就是我們必須要描述
我們最後運算完成之後 寫回暫存器的這個暫存器編號是多少
我們決定了暫存器的編號之後
busW / Write Enable
當然 我們也需要把暫存器的資料
要寫進去的資料
讓它能夠傳到Register file裡面
所以同學可以看到busW也是32個bits
我們把資料寫進來
同樣的我們需要用Write Enable去確定我到底是不是真的要把資料寫到暫存器
clock
最後 因為我們的register file是一個sequential circuit
可想而知 我們一定會需要使用到clock
透過clock來決定什麼時候
資料真的被寫到暫存器裡面
Storage element: Memory
在MIPS這個指令集裡面
我們的處理器可以最大定址的記憶體的範圍
是4GB
主要的原因是因為我們用32個bits來做定址
所以我們的address會有32個bits
MIPS的processor
它一個word是4個byte
也因此會一次讀出32個bits
但是一個最基本定址的大小
是一個byte 也就是8個bits
Memory read
其實這個bit
它要做的事情並不是去控制說
我什麼時候可以讀
而是透過這個bit去決定
現在我們要來進行的記憶體存取
到底是read或是write
組合
簡單例子: 存取記憶體裡的指令
R-format
load/store的operation也就是記憶體存取
reuse融合R/I format
branch(beq)
我們要去比較兩個暫存器的值是否相等
一個最容易的做法就是把兩個暫存器的值拿出來
進行減法
當減法完成時
我們只要看一下它output出來的結果是不是全為0